#ifndef __IQHELLO_H__
#define __IQHELLO_H__

#include "macros.h"

// 定义 meta 类型
#ifdef __cplusplus
extern "C" {
#endif

    typedef enum {
        IQ_IMPL_C   = 1,  // C 函数指针实现
        IQ_IMPL_CPP = 2,  // C++ 虚函数实现
        IQ_IMPL_GO,
    } IQImplType;

    IQImplType impl_t();
    typedef IQImplType (*IQImplTypeFunc)();

#ifdef __cplusplus
}
#endif

// 
#ifdef __cplusplus

    #include <string>
    class IQHello
    {
    public:
        virtual std::string getHello() = 0; 
    };

#else
    
    typedef struct IQHello IQHello;

#endif

#ifdef __cplusplus
extern "C" {
#endif

    // [1] C 接口 声明
    DECLARE_INTERFACE(IQHello)

    // [2] 扩展 C 函数实现
    typedef char* (*GetHelloFunc)(IQHello*);
    char* getHello(IQHello*);

#ifdef __cplusplus
}
#endif

#endif